home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / applications / wp / fwmacros1.lha / UserMacros / english / HorizontalAlign.fw < prev    next >
Encoding:
Text File  |  1994-10-04  |  4.8 KB  |  165 lines

  1. /*
  2. $AUTHOR:  Fernando Nunes e Manuel Lemos (UpperDesign@zeus.ci.ua.pt)
  3. $VER: HorizontalAlign 1.00 (2.10.94)
  4.       Description:  ARexx macro for FinalWriter to horizontally align all
  5.                     selected graphics
  6. */
  7.  
  8. options results
  9.  
  10. GraphicTool
  11. SetMeasure
  12.  
  13. /* obter uma lista dos objectos seleccionados */
  14. selecionados = 0
  15. FirstObject SELECTED
  16. do until result = 0
  17.   selecionados = selecionados + 1
  18.   objectid.selecionados = result
  19.   NextObject objectid.selecionados SELECTED
  20. end
  21.  
  22. if selecionados > 1 then
  23. do
  24.  
  25.   call addlib("rexxreqtools.library", 0, -30, 0)
  26.  
  27.   NL = '0a'x
  28.  
  29.   ALINHAR_A_ESQUERDA = 1
  30.   ALINHAR_AO_CENTRO  = 2
  31.   ALINHAR_A_DIREITA  = 3
  32.   AJUDA              = 4
  33.   CANCELAR           = 0
  34.  
  35.   do until alinhar ~= AJUDA
  36.       alinhar = rtezrequest( "Horizontal alignment of graphic objects",,
  37.                              "_Left|_Center|_Right|_Help|Cancel",,
  38.                              "" )
  39.  
  40.       if alinhar = AJUDA then
  41.       call rtezrequest( "Horizontal alignment of graphic objects" || NL || NL||,
  42.                         "Left - aligns the selected objects by the" || NL ||,
  43.                         "left coordinate of the leftmost object." || NL || NL,
  44.                         "Center - centers the selected objects" || NL ||,
  45.                         "in the middle of the leftmost and" || NL ||,
  46.                         "topmost objects." || NL || NL,
  47.                         "Right - aligns the selected objects by" || NL ||,
  48.                         "right coordinate of the rightmost object.",,
  49.                         "I see",,
  50.                         "Help")
  51.   end
  52.   if alinhar = CANCELAR then
  53.     return
  54.  
  55.   /* determinar a coordenada dos objectos mais à esquerda e mais à direita */
  56.   do objecto = 1 to selecionados
  57.     GetObjectCoords objectid.objecto
  58.     coords = RESULT
  59.     PARSE VAR coords pagina esquerda cima direita baixo
  60.     GetObjectType objectid.objecto
  61.     tipo = result
  62.  
  63.     /* linhas */
  64.     if tipo = OBJECTO_LINHA then
  65.       do
  66.         if esquerda > direita then
  67.           do
  68.             troca = esquerda
  69.             esquerda = direita
  70.             direita = troca
  71.           end
  72.       end
  73.     else
  74.       direita = esquerda + direita
  75.     if objecto = 1 | esquerda < mais_a_esquerda then
  76.       mais_a_esquerda = esquerda
  77.     if objecto = 1 | direita > mais_a_direita then
  78.       mais_a_direita = direita
  79.   end
  80.  
  81.   if alinhar = ALINHAR_A_ESQUERDA then
  82.     /* mover os objectos para a esquerda */
  83.     do objecto = 1 to selecionados
  84.       GetObjectCoords objectid.objecto
  85.       coords = RESULT
  86.       PARSE VAR coords pagina esquerda cima direita baixo
  87.       GetObjectType objectid.objecto
  88.       tipo = result
  89.  
  90.       /* linhas */
  91.       if tipo = OBJECTO_LINHA then
  92.         do
  93.           if esquerda < baixo then
  94.             do
  95.               direita = mais_a_esquerda + direita - esquerda
  96.               esquerda = mais_a_esquerda
  97.             end
  98.           else
  99.             do
  100.               esquerda =  mais_a_esquerda + esquerda - direita
  101.               direita = mais_a_esquerda
  102.             end
  103.         end
  104.       else
  105.         esquerda = mais_a_esquerda
  106.       SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  107.     end
  108.   if alinhar = ALINHAR_AO_CENTRO then
  109.     do
  110.       /* centrar os objectos */
  111.       centro = ( mais_a_direita + mais_a_esquerda ) / 2
  112.       do objecto = 1 to selecionados
  113.         GetObjectCoords objectid.objecto
  114.         coords = RESULT
  115.         PARSE VAR coords pagina esquerda cima direita baixo
  116.         GetObjectType objectid.objecto
  117.         tipo = result
  118.  
  119.         /* linhas */
  120.         if tipo = OBJECTO_LINHA then
  121.           do
  122.             meia_largura = ( direita - esquerda ) / 2
  123.             direita = centro + meia_largura
  124.           end
  125.         else
  126.           meia_largura = direita / 2
  127.         esquerda = centro - meia_largura
  128.         SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  129.       end
  130.     end
  131.   if alinhar = ALINHAR_A_DIREITA then
  132.     /* mover os objectos para a direita */
  133.     do objecto = 1 to selecionados
  134.       GetObjectCoords objectid.objecto
  135.       coords = RESULT
  136.       PARSE VAR coords pagina esquerda cima direita baixo
  137.       GetObjectType objectid.objecto
  138.       tipo = result
  139.  
  140.       /* linhas */
  141.       if tipo = OBJECTO_LINHA then
  142.         do
  143.           if esquerda < direita then
  144.             do
  145.               esquerda = mais_a_direita - direita + esquerda
  146.               direita = mais_a_direita
  147.             end
  148.           else
  149.             do
  150.               direita = mais_a_direita - esquerda + direita
  151.               esquerda = mais_a_direita
  152.             end
  153.         end
  154.       else
  155.         esquerda = mais_a_direita - direita
  156.       SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  157.     end
  158.  
  159.   /* voltar a selecionar todos os objectos selecionados antes */
  160.   do objecto = 1 to selecionados
  161.     SelectObject objectid.objecto MULTIPLE
  162.   end
  163.   redraw
  164. end
  165.